草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 如何杀死等待Java中阻塞函数调用的线程?

我有一个主题:Threadt=newThread(){publicvoidrun(){ServerSocketConnectionscn=(ServerSocketConnection)Connector.open("socket://:1234");//Waitforaconnection.SocketConnectionsc=(SocketConnection)scn.acceptAndOpen();//dootheroperation}};t.start();假设没有客户端连接到服务器,那么这个线程将被阻塞。现在我想杀死上面的线程t?我怎样才能杀死它?

java - 在 Java 中动态更改处理线程的名称是个好主意吗?

我们有一个处理请求的Java应用程序。自然地,有一个线程池,其中的线程以一些无关紧要的名称命名,如“processor-1”、“processor-2”等。我们想知道每次收到对名称的请求时重命名处理线程是否是个好主意这将指示正在处理哪个请求。我觉得这件事有问题,但想不出一个好的理由。我记得几个从线程转储中分析多线程问题的案例,知道我是否在两个连续的转储中看到同一个线程对我来说非常重要。但是,我意识到我可以改为查看线程ID。在log4j日志中,写线程名称是一种常见的做法,我记得很多情况下都是通过它进行过滤的。但我仍然不确定我在这里是否有良好的“防线”。常见的做法是什么?继续重命名线程是个

java - 更好的方法来通知其他线程停止?

启动了几个工作线程,需要通知他们停止。由于某些线程在下一轮工作之前会hibernate一段时间,因此需要一种即使在hibernate时也能通知它们的方法。如果是Windows编程,我可以使用事件和等待函数。在Java中,我通过使用计数为1的CountDownLatch对象来执行此操作。它可以工作但感觉不优雅,尤其是我必须检查计数值以查看是否需要退出:run(){while(countDownLatch.count()>0){//working//...countDownLatch.wait(60,TimeUnit.SECONDS);}}Semaphore是另一种选择,但也感觉不太对。我

java - 如何实现线程安全的收集器?

我想要类似于Collectors.maxBy()的东西,一个获取集合中顶部元素的收集器(maxBy只获取一个)。我有一个Possibility的流可以用Integerscore(Possibility)评分的对象方法。首先我尝试了:Listpossibilities=getPossibilityStream().parallel().collect(Collectors.toList());if(!possibilities.isEmpty()){intbestScore=possibilities.stream().mapToInt(p->score(p)).max().getAsI

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录1、锁的策略1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁1.3、自旋锁和挂起等待锁1.4、普通互斥锁和读写锁1.5、公平锁和非公平锁1.6、可重入锁和不可重入锁 2、synchronized内部的升级与优化过程2.1、锁的升级/膨胀2.1.1、偏向锁阶段2.1.2、轻量级锁阶段2.1.3、重量级锁阶段2.2、锁消除2.3、锁粗化3、CAS(Compareandswap)3.1、CAS的应用3.1.1、实现Atomic原子类3.1.2、实现自旋锁3.1.3、CAS的ABA问题1、锁的策略加锁过程中,处理冲突的过程中,涉及到的一些不同的处理方式,就叫锁的策略。1.1、乐观锁和悲观锁 乐观

java - 跟踪 Java 线程的创建和生命周期

是否有任何工具可用于跟踪Java线程的创建和生命周期?我会对以下所有内容感兴趣:调用newThread()的调用栈调用start()的调用栈run()方法的生命周期 最佳答案 我已经编写并发布了一个开源工具来回答这个问题。JavaLiveThreadAnalyser我已经在博客中介绍了该工具here. 关于java-跟踪Java线程的创建和生命周期,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

java - 从java中的另一个线程访问一个线程的变量

我试图在java的另一个线程中访问和修改一个线程的变量,但我真的不知道该怎么做。例如:Runnabler1=newRunnable(){intvalue=10;publicvoidrun(){//randomstuff}}Runnabler2=newRunnable(){publicvoidrun(){//ofcoursethebellowlinewillnotworkr1.value--;//Iwantheretobeabletodecrementthevariable"value"ofr1}}Threadt1=newThread(r1);Threadt2=newThread(r2)

java - sleep() 方法如何在给定线程和输出上工作?

据我所知,sleep()用于让线程hibernate指定时间。我做了两个示例-在示例1中,我得到的输出为1,2,3,4因为我只创造了一个。在示例2中,我创建了线程的2个实例,并得到输出1,1,2,2,3,3,4,4。为什么第一个线程的输出不是1、2、3、4,然后是1,2,3,4是第二个吗?示例1://Usingsleep()methodpublicclassAaaextendsThread{publicvoidrun(){for(inti=1;i示例2://Usingsleep()methodpublicclassAaaextendsThread{publicvoidrun(){for

java - Spring 的多线程

我正在尝试进入spring多线程,我有几个问题。我在ThreadRating类中有可运行的方法。现在我不确定使用它的最佳方式。我找到的选项1:privatevoidupdateRating(){ExecutorServiceexecutor=Executors.newFixedThreadPool(10);for(inti=0;i这似乎运行良好。for循环后,等待线程执行完毕结束。我尝试的第二个选项privateTaskExecutortaskExecutor;publicUpdateBO(TaskExecutortaskExecutor){this.taskExecutor=task

java - 对象构造在实践中是否保证所有线程都看到已初始化的非最终字段?

Javamemorymodel保证对象的构造和终结器之间存在先行关系:Thereisahappens-beforeedgefromtheendofaconstructorofanobjecttothestartofafinalizer(§12.6)forthatobject.以及final字段的构造函数和初始化:Anobjectisconsideredtobecompletelyinitializedwhenitsconstructorfinishes.Athreadthatcanonlyseeareferencetoanobjectafterthatobjecthasbeencomp